package com.mts.javacommon;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.List;

/**
 * Created on 2025/8/22 16:48.
 *
 * @author Johnny
 */
public class CodeGeneratorConfig {

  private static final String[] TABLE_NAMES = new String[] {"t_year_manage", "t_dict_info"};

  public static DataSourceConfig getDataSourceConfig() {
    return new DataSourceConfig()
        .setDbType(DbType.MYSQL)
        .setUrl(
            "jdbc:mysql://localhost:3306/indicator_system?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai")
        .setDriverName("com.mysql.jdbc.Driver")
        .setUsername("root")
        .setPassword("root123456");
  }

  public static GlobalConfig getGlobalConfig() {
    return new GlobalConfig()
        // 设置作者
        .setAuthor("Johnny")
        // 是否支持AR模式，模板中已此项去掉，所以无效
        .setActiveRecord(false)
        // 生成文件的路径
        .setOutputDir("/Users/johnny/java/independent/indicator-system/indicator-system/")
        // 文件覆盖
        .setFileOverride(false)
        // 生成完成之后是否打开输出目录
        .setOpen(false)
        // 主键策略
        .setIdType(IdType.AUTO)
        .setBaseResultMap(true)
        .setBaseColumnList(false)
        .setSwagger2(true)
        // 所有日期类型都使用java.utils.Date
        .setDateType(DateType.ONLY_DATE);
  }

  // 策略配置
  public static StrategyConfig getStrategyConfig() {
    return new StrategyConfig()
        .setTablePrefix("t_")
        // 全局大写
        .setCapitalMode(true)
        // 数据库表映射到实体的命名策略
        .setNaming(NamingStrategy.underline_to_camel)
        // 是否全部生成@TableField注释
        .setEntityTableFieldAnnotationEnable(true)
        // .setExclude("user") // 排除某一个表
        // strategyConfig.setInclude("t_user"); // 不指定表名就全部表都生成
        // strategyConfig.setTablePrefix("pkg_"); // 表前缀
        .setInclude(TABLE_NAMES)
        .setChainModel(false)
        .setEntityLombokModel(true)
        .setEntityColumnConstant(true)
        .setEntitySerialVersionUID(false)
        // Controller是否Rest风格
        .setRestControllerStyle(true);
  }
}
